﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Comissoes.Utilities;

namespace Comissoes.Models
{
    public class PessoasModel
    {
        public PESSOAS pessoa { get; set; }
        List<string> erros;

        public PessoasModel()
        {
            this.pessoa = new PESSOAS(); 
        }

        public PessoasModel(PESSOAS pessoa)
        {
            this.pessoa = pessoa;
        }

        public List<string> UpdateValidate(FormCollection form)
        {
            erros = new List<string>();

            if (string.IsNullOrEmpty(form["NOME_PESSOA"]))
                erros.Add("É necessário informar o nome da pessoa.");

            return erros;
        }

        public List<string> Update(xcontEntities db, FormCollection form)
        {
            erros = new List<string>();

            Int32?ID_PESSOA = Convertions.Inteiro(form["ID_PESSOA"]);

            try
            {
                if (db.PESSOAS.Any(t => t.ID_PESSOA == ID_PESSOA))
                {
                    this.pessoa = db.PESSOAS.FirstOrDefault(t => t.ID_PESSOA == ID_PESSOA);
                }
                else
                {
                    String VALOR_PSDC = form["VALOR_PSDC"].Replace(".", "").Replace("/", "").Replace("-", "");

                    if (db.DOCUMENTOS_PESSOA.Any(t => t.VALOR_PSDC == VALOR_PSDC))
                    {
                        ID_PESSOA = db.DOCUMENTOS_PESSOA.First(t => t.VALOR_PSDC == VALOR_PSDC).PESSOAS.ID_PESSOA;
                        this.pessoa = db.PESSOAS.FirstOrDefault(t => t.ID_PESSOA == ID_PESSOA);
                    }
                    else if (!string.IsNullOrEmpty(VALOR_PSDC))
                    {
                        Int32 COD_DOC = form["TIPO_PESSOA"] == "F" ? 1 : 2;
                        db.AddToDOCUMENTOS_PESSOA(new DOCUMENTOS_PESSOA
                        {
                            DOCUMENTOS = db.DOCUMENTOS.FirstOrDefault(t => t.COD_DOC == COD_DOC),
                            PESSOAS = this.pessoa,
                            VALOR_PSDC = VALOR_PSDC
                        });
                        db.AddToPESSOAS(this.pessoa);
                    }
                }

                this.pessoa.NOME_PESSOA = form["NOME_PESSOA"];
                this.pessoa.FANTASIA_PESSOA = form["FANTASIA_PESSOA"];
                this.pessoa.NASCIMENTO_PESSOA = Convertions.Data(form["NASCIMENTO_PESSOA"]);
                this.pessoa.OBS_PESSOA = form["OBS_PESSOA"];
                this.pessoa.TIPO_PESSOA = form["TIPO_PESSOA"];

                db.SaveChanges();
            }
            catch (Exception ex)
            {
                erros.Add(ex.Message);
                if (ex.InnerException != null)
                    erros.Add(ex.InnerException.Message);
            }

            return erros;
        }
    }
}